home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1993 November / JCSM Shareware Collection - 1993-11.iso / cl720 / sst115j.lzh / STERM.C < prev    next >
C/C++ Source or Header  |  1992-10-09  |  7KB  |  212 lines

  1. /* ------------------------------------------------------------------------ */
  2. /*                         testbed for the DPNSS                            */
  3. /* ------------------------------------------------------------------------ */
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <process.h>
  7. #include <stdlib.h>
  8. #include <dos.h>
  9. #include <stdarg.h>
  10.  
  11. #include "sstvid.h"
  12. #include "sstwin.h"
  13. #include "sstkey.h"
  14. #include "sstfos.h"
  15.  
  16.  
  17. /* ---------- Constants    ------------- */
  18. #define OFFSCREENX(wnd)        ((wnd->_cr+1) > (wnd->_ww-2))
  19. #define OFFSCREENY(wnd,y)      ((wnd->_wh-2) > (y))
  20.  
  21.  
  22. /* -------------- Global Variables --------------- */
  23. int port   = F_COM1;      /* default com port     */
  24. int param  = F_B2400|     /* default baud         */
  25.          F_NORMAL;    /* default character framing  */
  26. int hexmode = 0;          /* Hex interpretation */
  27. int ry      = 0;          /* Cursor y Rx window   */
  28. int ty      = 0;          /* Cursor y Tx window   */
  29.  
  30. WINDOW *wndRx;            /* main receive window */
  31. WINDOW *wndTx;            /* main transmitt window */
  32. FILE *fp;                 /* capture file pointer */
  33.  
  34. /* ------------ Function ProtoTypes -------------- */
  35. int OpenFossil(void);
  36. void togglebit(int *w, int n);
  37. void ErrorExit(char *fmt, ...);
  38. void OpenWindows(void);
  39. void ClearWindows(void);
  40. void OutChar(unsigned char ch);
  41. void InChar(unsigned char ch);
  42. void hexcmd(char *str, char *msg);
  43. void main(int argc, char *argv[]);
  44.  
  45. /* ------------------------------------------------------------------------ */
  46. /*                     toggles a given bit in  a word                       */
  47. /* ------------------------------------------------------------------------ */
  48. void togglebit(int *w, int n)
  49.  
  50. {
  51.   *w ^= (1 << n);
  52. }
  53.  
  54. /* ------------------------------------------------------------------------ */
  55. /*                      prints a message and terminates                     */
  56. /* ------------------------------------------------------------------------ */
  57. void ErrorExit(char *fmt, ...)
  58.  
  59. {
  60.    va_list argptr;
  61.  
  62.    va_start(argptr, fmt);
  63.    vprintf(fmt, argptr);
  64.    va_end(argptr);
  65.    exit(1);
  66. }
  67.  
  68. /* ------------------------------------------------------------------------ */
  69. /*                    creates and opens all the windows                     */
  70. /* ------------------------------------------------------------------------ */
  71. void OpenWindows(void)
  72.  
  73. {
  74.    vpushcur();   /* save cursor pos */
  75.    if (!(wndTx = Westablish(0, 0, 7, SCREENWIDTH -1)))
  76.          ErrorExit("Memory allocation error.");
  77.    if (!(wndRx = Westablish(0, 7, 17,SCREENWIDTH -1)))
  78.          ErrorExit("Memory allocation error.");
  79.    Wsetcolour(wndRx,WIN_ALL  , BLACK,LIGHTGRAY,DIM);
  80.    Wsetcolour(wndRx,WIN_TITLE, LIGHTGRAY,RED,DIM);
  81.    Wsetcolour(wndTx,WIN_ALL,   BLACK,LIGHTGRAY,DIM);
  82.    Wsetcolour(wndTx,WIN_TITLE, LIGHTGRAY,RED,DIM);
  83.    Wsettitle(wndRx,"[ Receive ]",JUST_L);
  84.    Wsettitle(wndTx,"[ Transmitt ]",JUST_L);
  85.    Wshow(wndRx);
  86.    Wshow(wndTx);
  87.    ClearWindows();
  88. }
  89.  
  90. /* ------------------------------------------------------------------------ */
  91. /*                   clears the contents of all the windows                 */
  92. /* ------------------------------------------------------------------------ */
  93. void ClearWindows(void)
  94.  
  95. {
  96.    ty = ry = 0;
  97.    wndRx->_cr = 0;
  98.    wndTx->_cr = 0;
  99.    Wclear(wndRx);
  100.    Wclear(wndTx);
  101.    Wcursor(wndTx,0,0);
  102. }
  103.  
  104. /* ------------------------------------------------------------------------ */
  105. /*                    dumps a char to the transmitt window                  */
  106. /* ------------------------------------------------------------------------ */
  107. void OutChar(unsigned char ch)
  108.  
  109. {
  110.    if ( hexmode ) Wprintf(wndTx,"%02X ",ch);
  111.      else Wputch(wndTx,ch);
  112.      if ( OFFSCREENX(wndTx) || (hexmode && (wndTx->_cr+1 > wndTx->_ww-3))) {
  113.       Wputch(wndTx,'\n');
  114.       if (ty < (wndTx->_wh -3))
  115.     ty++;
  116.       }
  117.    Wcursor(wndTx,wndTx->_cr,ty);
  118. }
  119.  
  120. /* ------------------------------------------------------------------------ */
  121. /*                     dumps a char to the receive window                   */
  122. /* ------------------------------------------------------------------------ */
  123. void InChar(unsigned char ch)
  124.  
  125. {
  126.    if ( hexmode ) Wprintf(wndRx,"%02X ",ch);
  127.      else Wputch(wndRx,ch);
  128.      if ( OFFSCREENX(wndRx) || (hexmode && (wndRx->_cr+1 > wndRx->_ww-3))) {
  129.       Wputch(wndRx,'\n');
  130.       if (ry < (wndRx->_wh -3))
  131.       ry++;
  132.     Wcursor(wndRx,wndRx->_cr,ry);
  133.       }
  134.     Wcursor(wndRx,wndRx->_cr,ry);
  135. }
  136.  
  137. /* ------------------------------------------------------------------------ */
  138. /*                   attempts to initialise the fossil driver               */
  139. /* ------------------------------------------------------------------------ */
  140. int OpenFossil(void)
  141.  
  142. {
  143.   int s;
  144.   char flagbyte = 0;
  145.   unsigned byte = 0;
  146.   struct fdata fd;
  147.  
  148.   if ( ffinit(port, &byte, (char far *)&flagbyte) != F_SIGNATURE)
  149.     ErrorExit("Couldn't initialise Fossil Driver\n");
  150.  
  151.   finfo(port,&fd,sizeof(struct fdata));
  152.   printf("Structure size               : %u\n",fd.fdsize);
  153.   printf("FOSSIL spec version          : %d\n",fd.specver);
  154.   printf("FOSSIL spec driver revision  : %d\n",fd.drvlvl);
  155.   printf("FOSSIL ID                    : %Fs\n",fd.drvid);
  156.   printf("Input buffer size            : %u\n",fd.rxsize);
  157.   printf("Input bytes available        : %u\n",fd.rxavail);
  158.   printf("Output buffer size           : %u\n",fd.txsize);
  159.   printf("Output bytes available       : %u\n",fd.txavail);
  160.   printf("Screen width                 : %d\n",fd.scnwid);
  161.   printf("Screen height                : %d\n",fd.scnlen);
  162.   printf("BAUD rate mask               : %u\n",fd.bdmask);
  163.   getch();
  164.  
  165.   s = finit(port,param);
  166.   return s;
  167. }
  168.  
  169.  
  170. /* ------------------------------------------------------------------------ */
  171. /*                               function main                              */
  172. /* ------------------------------------------------------------------------ */
  173. void main(int argc, char *argv[])
  174.  
  175. {
  176.   unsigned int c;
  177.  
  178.   clrscr();
  179.   if (argc>1)
  180.        port=atoi(argv[1])-1;
  181.   OpenFossil();                   /* open fossil driver */
  182.   fpurgein(port);              /* purge com port */
  183.   OpenWindows();                     /* open all windows */
  184.  
  185.   for (;;) {                             /* main dispath loop  */
  186.     if ( fpeek(port) != F_NULL)   {
  187.       c = fgetch(port);
  188.       InChar(c);
  189.     }
  190.     if ( fkbdpeek() != F_NULL)  {                  /* grab a keypress */
  191.            c = fkbdgetch();                     /* get the char */
  192.            switch(c)   {
  193.  
  194.           case 0x2300   : togglebit(&hexmode,1);   /* Alt-H */
  195.                   break;
  196.           case 0x2E00   : ClearWindows();    /* Alt-C */
  197.                   break;
  198.           default       : OutChar(c);
  199.                   fputch(port,c);
  200.                   break;
  201.            }
  202.            if (c == 0x2D00 || c == 0x011B)  /* Alt-X or ESC */
  203.              break;
  204.        }
  205.   }
  206.   fdeinit(port);                           /* de-init FOSSIL */
  207.   Wdeleteall();                                  /* close all the windows */
  208.   vpopcur();
  209. }
  210.  
  211.  
  212.